package Netz;


import abiturklassen.netzklassen.*;

/**
 * Die Klasse fuer den Client.
 * @author Daniel Mueller, Phillip Hertel, Jonas Hauff
 */
public class NetzeClient extends Client{
    private boolean Andr;
    private int Farbe;
    private String name;
    private Herausforderung heraus;
    private Netze spiel;
    private Lobbys lobby;
    private Spielende ende;
    private String[] spieler;
    
    public NetzeClient(String ip,int port, String pName)
    {
        super(ip,port);   
        name = pName;
    }
    /**
     * Die einkommende Nachricht wird verarbeitet, je nach Beginn der Nachricht.
     * Es wird immer der Bafehl und die Nachricht durch ein ":" getrennt, um diese zu trennen.
     * @param pMessage 
     */
    @Override
    public void processMessage(String pMessage)
    {
        int a = pMessage.indexOf(':');
        if(a!=-1)
        {
            if(pMessage.substring(0,a).equals("folgender Spieler fordert dich heraus")) // Das Fenster fuer eine Herausforderung wird geoeffnet.
            {
                heraus = new Herausforderung();
                heraus.setpName(pMessage.substring(a+2, pMessage.length()));
                heraus.setClient(this);
                heraus.setVisible(true);
            }
            if(pMessage.substring(0,a).equals("Das Feld wurde erfolgreich makiert"))    // Das Feld wird makiert und der Spieler ist nicht mehr an der Reihe. 
            {
                spiel.feldMakieren(pMessage.substring(a+2, pMessage.length()));
                spiel.setAnderReihe(false);
            }
            if(pMessage.substring(0,a).equals("Du bist dran"))  // Das Feld was der Gegner makiert hat, wird makiert und der Spieler kommt an die Reihe.
            {
                spiel.gegnerFeldMakieren(pMessage.substring(a+2, pMessage.length()));
                spiel.setAnderReihe(true);
            }
            if(pMessage.substring(0,a).equals("Folgender Spieler hat gewonnen"))    // Das Fenster fuer das Spielende wird geoeffnet in dem gesagt wird ob man gewonnen oder verloren hat.
            {
                spiel.setVisible(false);
                ende = new Spielende();
                if(pMessage.substring(a+2,pMessage.length()).equals(name))
                {
                    ende.setLabel("Gewonnen");
                }
                else ende.setLabel("Verloren");
                ende.setLobby(lobby);
                ende.setVisible(true);
            }
            if(pMessage.substring(0,a).equals("Spielerliste"))  // Die Spielerliste in der Lobby wird aktualisiert.
            {
                spieler = pMessage.substring(a+2,pMessage.length()).split(" ");
                String pText = "";
                for(int i=0; i< spieler.length;i++)
                {
                    if(!spieler[i].equals("")&&!spieler[i].equals(name))
                    {
                        pText = pText + spieler[i] + "\n";
                    }
                }
                lobby.spielerlisteAkt(pText);
            }
        }
        if(pMessage.equals("Unentschieden"))    // Das Fenster fuer das Spielende wird mit einem Unentschieden geoeffnet und Spiel beendet.
        {
            spiel.setVisible(false);
            ende = new Spielende();
            ende.setLabel("Unentschieden");
            ende.setLobby(lobby);
            ende.setVisible(true);   
        }
        if(pMessage.equals("Du fängst an")) // Der Spieler faengt an und das Spiel wird gestartet.
        {
            spiel = lobby.spielStarten();
            spiel.setAnderReihe(true);
        }
        if(pMessage.equals("Das Spiel startet"))    // Der Spieler ist als zweites dran und Spiel wird gestartet.
        {
            spiel = lobby.spielStarten();
            spiel.setAnderReihe(false);
        }
    }
    /**
     * Die Lobby wird uebergeben.
     * @param pLobby 
     */
    public void setLobby(Lobbys pLobby)
    {
        lobby = pLobby;
    }
    /**
     * Die Lobby wird ausgegeben.
     * @return 
     */
    public Lobbys getLobby()
    {
        return lobby;
    }
    /**
     * Das Spiel wird uebergeben.
     * @param pSpiel 
     */
    public void setSpiel(Netze pSpiel)
    {
        spiel = pSpiel;
    }
    /**
     * Das Spiel wird ausgegeben.
     * @return 
     */
    public Netze getSpiel()
    {
        return spiel;
    }
    /**
     * Es wird an den Server die Nachricht gesendet.
     * @param pMessage 
     */
    public void pSend(String pMessage)
    {
        send(pMessage);
    }
    /**
     * Der Name des Spielers wird ausgegeben.
     * @return 
     */
    public String getName()
    {
        return name;
    }
    /**
     * Der Client logt sich aus.
     */
    public void beenden()
    {
        pSend("Logout: "+name);
        this.close();
    }
}
